package com.zw.a.basic.a15.demo03_reflect;

import com.itheima.pojo.Student;

import java.lang.reflect.Field;

//案例: 通过反射获取私有的成员变量并赋值
/*
    Field单词的意思就是: 字段, 变量.

    反射获取成员变量涉及到的API, 以下全部都是Class类中的方法
        public Field getDeclaredField(String name);  根据传入的变量名, 获取其对应的成员变量对象(包括私有)

    Field类中的成员方法:
        public void set(Object obj, Object value);  //设置obj对象的指定属性为指定的值(value)
        public void setAccessible(boolean flag)     //暴力反射

    获取成员变量的目的:
        就是普通的使用变量, 或者修改某些私有的变量.
 */
public class Demo06 {
    public static void main(String[] args) throws Exception {
        //1. 获取该类的字节码文件对象.
        Class<?> clazz = Class.forName("com.itheima.pojo.Student");
        //2. 获取所有的成员变量
        Field field = clazz.getDeclaredField("name");
        //3. 创建该类对象.
        Student s = (Student) clazz.newInstance();

        //4. 设置指定对象的指定属性为指定的值.
        field.setAccessible(true);      //暴力反射.
        field.set(s, "刘亦菲");

        //5. 打印学生对象.
        System.out.println(s);
    }
}
